﻿
using System.IO;
using System;
using System.Collections.Generic;
using LiveatEdu.model;
namespace LiveatEdu.dao
{
    class ConnectionCSV 
    {

        public List<Person> LeDocProf(string path)
        {
            try
            {
                StreamReader sr = new StreamReader(path);
                string inputLine = "";
                List<Person> prof= new List<Person>();
                String[] values = null;
                while ((inputLine = sr.ReadLine()) != null)
                {

                    values = inputLine.Split(';');


                    /*Essas string abaixo servem para eliminar as duas primeiras linhas do arquivo gerado pelo PS
                     * dessa forma evita de estourar o list e cria apenas os objetos corretos que possuem apenas
                     * as informaçoes dos grupo
                     */

                    string header = "" + "#TYPE Deserialized.Microsoft.Exchange.Data.Directory.Management.Mailbox" + "";
                    string header1 = "" + "\"PSComputerName\"" + "";
                    if (header != (string)values.GetValue(0) && header1 != (string)values.GetValue(0))
                    {

                        List<String> groupParameter = new List<string>(); ;
                        //windows live ID (65)
                        //alias (115)
                        //displayname (139)
                        //primarysmtpaddress(153)
                        //name (171)
                        string  email =(string) values.GetValue(153);
                        if (email.Contains("@docente.facet.edu.br"))
                        {
                            groupParameter.Add((string)values.GetValue(65));
                            groupParameter.Add((string)values.GetValue(115));
                            groupParameter.Add((string)values.GetValue(139));
                            groupParameter.Add((string)values.GetValue(153));
                            groupParameter.Add((string)values.GetValue(171));
                        }
                    }
                }
                sr.Close();
                return prof;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                return null;
            }
        }

        public List<String> LeMailBoxExchange(string path)
        {
            try
            {
                StreamReader sr = new StreamReader(path);
                string inputLine = "";
                List<String> mailbox = new List<String>();
                String[] values = null;
                while ((inputLine = sr.ReadLine()) != null)
                {

                    values = inputLine.Split(';');


                    /*Essas string abaixo servem para eliminar as duas primeiras linhas do arquivo gerado pelo PS
                     * dessa forma evita de estourar o list e cria apenas os objetos corretos que possuem apenas
                     * as informaçoes dos grupo
                     */

                    string header = "" + "#TYPE Deserialized.Microsoft.Exchange.Data.Directory.Management.Mailbox" + "";
                    string header1 = "" + "\"PSComputerName\"" + "";
                    if (header != (string)values.GetValue(0) && header1 != (string)values.GetValue(0))
                    {

                        List<String> groupParameter = new List<string>(); ;
                        //windows live ID (65)
                        mailbox.Add((string)values.GetValue(65));
                    }
                }
                sr.Close();
                return mailbox;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                return null;
            }
        }

        public List<Group> LeDocGrupo(string path)
        {
            try
            {
                StreamReader sr = new StreamReader(path);
                string inputLine = "";
                List<Group> grupos = new List<Group>();
                String[] values = null;
                while ((inputLine = sr.ReadLine()) != null)
                {
                    
                    values = inputLine.Split(';');
                    
                    
                    /*Essas string abaixo servem para eliminar as duas primeiras linhas do arquivo gerado pelo PS
                     * dessa forma evita de estourar o list e cria apenas os objetos corretos que possuem apenas
                     * as informaçoes dos grupo
                     */

                    string header = ""+ "#TYPE Deserialized.Microsoft.Exchange.Data.Directory.Management.DistributionGroup"+"";
                    string header1 = ""+"\"PSComputerName\""+"";
                    if ( header != (string)values.GetValue(0)  && header1!= (string)values.GetValue(0))
                    {

                        List<String> groupParameter = new List<string>(); ;
              
                        groupParameter.Add((string)values.GetValue(15));
                        groupParameter.Add((string)values.GetValue(16));
                        groupParameter.Add((string)values.GetValue(20));
                        groupParameter.Add((string)values.GetValue(73));
                        groupParameter.Add((string)values.GetValue(5));
                        groupParameter.Add((string)values.GetValue(72));
                        groupParameter.Add((string)values.GetValue(54));
                        grupos.Add(new Group(groupParameter));               
                    }
                }
                sr.Close();
                return grupos;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                return null;
            }
        }

        public List<Student> GeraMailBoxACriarAlunos(List<String> emails, List<Student> alunos)
        {
            List<Student> mailbox = alunos;
            for (int i = 0; i < alunos.Count; i++)
            {
                string contaAtual = "" + "\"" + alunos[i].Mail + "\"";
                for(int j = 0; j< emails.Count;j++)
                {                    
                    string contaVerifica = emails[j];
                    if (contaAtual != contaVerifica)
                    {
                        alunos.RemoveAt(i);
                        break;
                    }
                }                
            }
            return mailbox;

        }
    }
}
